import axios from 'axios';
import globalConfig from '@/config/index.js';
import router from '@/router/router';
import { MessageBox, Message } from 'element-ui';

// 创建 axios 实例
const service = axios.create({
    timeout: 10000 * 5, // 请求超时时间
    baseURL: globalConfig.pythonContext, // 请求基础 URL

    withCredentials: true // 请求携带 cookie
});

// 登录提醒
const loginTip = function () {
    MessageBox.alert('您尚未登录，请先登录', '操作提示', {
        confirmButtonText: '确定',
        callback: () => {
            router.push({
                path: '/login',
                query: { Rurl: router.currentRoute.fullPath } // 将当前页面的 url 传递给 login 页面进行操作
            });
        }
    });
};

// 请求拦截器
service.interceptors.request.use(
    (config) => {
        return config;
    },
    (error) => {
        console.log(error);
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    (response) => {
        console.log(response,"response");
          return Promise.resolve(response.data);
        // if (response.status === 202) {
        //     return Promise.resolve(response.data);
        // }
    },
    // 服务器状态码不是 202 的情况
    (error) => {
        if (error.response.status) {
            console.log(error.response);
            switch (error.response.status) {
                case 404:
                    Message.warning('接口不存在，请刷新重试或联系管理员');
                    break;
                case 401:
                    loginTip();
                    break;
                case 500:
                    Message.error('服务异常，请稍后刷新重试或联系管理员');
                    break;
                case 502:
                    Message.error('服务异常，请稍后刷新重试或联系管理员');
                    break;
                default:
                    Message.warning(error.response.data.message);
                    return Promise.reject(error.response);
            }
        }
    }
);

/**
 * 封装 get 方法 对应 GET 请求
 * @param {string} url 请求 url
 * @param {object} params 查询参数
 * @returns {Promise}
 */
export function get(url, params) {
    return service.get(url, { params });
}

/**
 * 封装 post 方法，对应 POST 请求
 * @param {string} url 请求 url
 * @param {object} data 请求体
 * @param {boolean | undefined} info 请求体是否为 FormData 格式
 * @returns {Promise}
 */
export function post(url, data = {}, info) {
    let newData = data;
    if (info) {
        // 转 formData 格式
        newData = new FormData();
        for (let i in data) {
            newData.append(i, data[i]);
        }
    }
    return service.post(url, newData);
}

/**
 * 封装 put 方法，对应 PUT 请求
 * @param {string} url 请求 url
 * @param {object} params 请求体
 * @returns {Promise}
 */
export function put(url, params = {}) {
    return service.put(url, params);
}

/**
 * 封装 axiosDelete 方法，对应 DELETE 请求
 * @param {string} url 请求 url
 * @param {object} params 请求体
 * @returns {Promise}
 */
export function axiosDelete(url, params = {}) {
    return service.delete(url, { data: params });
}